//
//  UItextView+Extension.swift
//  Wei91BoiOS
//
//  Created by bing on 16/4/4.
//  Copyright © 2016年 bing. All rights reserved.
//

import UIKit

extension UITextView {
    
    func emoticonText() -> String {
        // 获取textView里面的内容,发现表情没有-textView.Text:ddddddSSSSS￼￼😒
        //print("textView.Text:\(textView.text)")
        // 属性文本里面内容是分段保存，如果是附件后面附加的字典里面会有NSTextAttachment key
        //print("textView.attributedText:\(textView.attributedText)")
        // 遍历属性文本，获取里面的每一段
        var result = ""
        attributedText.enumerateAttributesInRange(NSRange(location: 0, length: attributedText.length), options: NSAttributedStringEnumerationOptions(rawValue: 0)) { (dict, Range, _) -> Void in
            
            // 如果字典里面有”NSAttachment“表示附件
            if let attachment = dict["NSAttachment"] as? QBTextAttachment {
                // 附件，通过附件来获取表情的名称
                result += attachment.chs!
            }  else {
                // 普通的文本和emoji
                let subString = (self.attributedText.string as NSString).substringWithRange(Range)
                result += subString
            }
        }
        return result
    }
    
    /**
     给textView来设置对应的内容
     
     - parameter emoticon: 点击的模型
     */
    func insetEmoticon(emoticon: QBEmoticonModel) {
        
        // 添加emoji表情
        if let emoji = emoticon.emoji {
            // 将emoji添加到textView上面
            insertText(emoji)
            return
        }
        
        // 图片表情
        if let fullPngPath = emoticon.fullPngPath {
//            // 图片->附件->属性文本
//            let attachment = QBTextAttachment()
//            attachment.image = UIImage(contentsOfFile: fullPngPath)
//            
//            // 设置表情名称给附件
//            attachment.chs = emoticon.chs
//            
//            let wh = (font?.lineHeight ?? 20) * 0.9
//            // bounds和frame正好相反,往下移是负数
//            attachment.bounds = CGRect(x: 0, y: -3, width: wh, height: wh)
//            
//            // 转换成可变的属性字体
//            let attrM = NSMutableAttributedString(attributedString: NSAttributedString(attachment: attachment))
//            
//            // 给附件设置UIFont属性，不然后面的表情会很小
//            attrM.addAttribute(NSFontAttributeName, value: font!, range: NSRange(location: 0, length: 1))
            
            let attrM = emoticon.emoticonModelToArrT(font!)
            
            // 不能直接替换属性文本，拿到之前属性文本，
            let oldAttrM = NSMutableAttributedString(attributedString: attributedText)
            
            let oldRange = selectedRange
            //将附件添加到之前的属性文本里面
            oldAttrM.replaceCharactersInRange(oldRange, withAttributedString: attrM)
            
            attributedText = oldAttrM
            
            // 光标会跑到最后去
            selectedRange = NSRange(location: oldRange.location + 1, length: 0)
            
            // 主动触发textView文本改变
            NSNotificationCenter.defaultCenter().postNotificationName(UITextViewTextDidChangeNotification, object: self)
            
            // 主动调用代理
            delegate?.textViewDidChange?(self)
        }
    }
}
